home *** CD-ROM | disk | FTP | other *** search
/ Tech Win 1999 February / TECH Win 02-1999 Disc A.iso / ols / lzh / tcl211.lzh / DLLSRC.lzh / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-10-27  |  3.0 KB  |  124 lines

  1. /*-----------------------------------------------------
  2.   main.c
  3.    TCDLLのAPI、フックプロシージャ
  4.    KAZUBON 1997-1998
  5. -------------------------------------------------------*/
  6.  
  7. #include "tcdll.h"
  8.  
  9. LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam);
  10. void InitClock(HWND hwnd);
  11.  
  12. /*------------------------------------------------
  13.  各プロセスで共通のデータ
  14. --------------------------------------------------*/
  15. extern HHOOK hhook;
  16. extern HWND hwndTClockMain;
  17. extern HWND hwndClock;
  18.  
  19. /*------------------------------------------------
  20.  Globals
  21. --------------------------------------------------*/
  22. extern HANDLE hmod;
  23. extern WNDPROC oldWndProc;
  24. extern BOOL bIE4;
  25. extern HWND hwndStartMenu;
  26.  
  27. /*------------------------------------------------
  28.  DLLのエントリポイント
  29. --------------------------------------------------*/
  30. BOOL WINAPI _DllMainCRTStartup(HANDLE hModule, DWORD dwFunction, LPVOID lpNot)
  31. {
  32.     hmod = hModule;
  33.     switch (dwFunction)
  34.     {
  35.         case DLL_PROCESS_ATTACH:
  36.             break;
  37.         case DLL_PROCESS_DETACH:
  38.             break;
  39.         default:
  40.             break;
  41.     }
  42.     return TRUE;
  43. }
  44.  
  45. /*------------------------------------------------
  46.  API:フックのインストール
  47. --------------------------------------------------*/
  48. void WINAPI HookStart(HWND hwndMain)
  49. {
  50.     HWND hwndTray;
  51.     HANDLE hThread;
  52.     
  53.     hwndTClockMain = hwndMain;
  54.     hwndTray = FindWindow("Shell_TrayWnd", NULL);
  55.     if(!hwndTray) return;
  56.     
  57.     hThread = (HANDLE)GetWindowThreadProcessId(hwndTray, NULL);
  58.     if(!hThread) return;
  59.     
  60.     hhook = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)CallWndProc, hmod,
  61.         (DWORD)hThread);
  62.     
  63.     //タスクバーの更新
  64.     PostMessage(FindWindow("Shell_TrayWnd", NULL), WM_SIZE,
  65.         SIZE_RESTORED, 0);
  66. }
  67.  
  68. /*------------------------------------------------
  69.  API:フックのアンインストール
  70. --------------------------------------------------*/
  71. void WINAPI HookEnd(void)
  72. {
  73.     HWND hwnd;
  74.  
  75.     //時計ウィンドウに終了処理をさせる
  76.     if(hwndClock && IsWindow(hwndClock))
  77.         SendMessage(hwndClock, WM_COMMAND, 102, 0);
  78.     hwndClock = NULL;
  79.     //フックのアンインストール
  80.     if(hhook != NULL)
  81.         UnhookWindowsHookEx(hhook); hhook = NULL;
  82.     
  83.     //タスクバーの更新
  84.     hwnd = FindWindow("Shell_TrayWnd", NULL);
  85.     if(hwnd)
  86.         PostMessage(hwnd, WM_SIZE, SIZE_RESTORED, 0);
  87. }
  88.  
  89. /*------------------------------------------------
  90.  フックプロシージャ
  91. --------------------------------------------------*/
  92. LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
  93. {
  94.     LPCWPSTRUCT pcwps;
  95.     char classname[80];
  96.  
  97.     pcwps = (LPCWPSTRUCT)lParam;
  98.  
  99.     if(nCode >= 0 && pcwps && pcwps->hwnd)
  100.     {
  101.         if(hwndClock == NULL &&
  102.             oldWndProc == NULL &&
  103.             GetClassName(pcwps->hwnd, classname, 80) > 0 &&
  104.             lstrcmpi(classname, "TrayClockWClass") == 0)
  105.         {
  106.             // 時計の初期化
  107.             InitClock(pcwps->hwnd);
  108.         }
  109.         /*
  110.         if(bIE4 && hwndClock)
  111.         {
  112.             char s[80];
  113.             GetClassName(pcwps->hwnd, classname, 80);
  114.             wsprintf(s, "%s %X", classname, pcwps->message);
  115.             WriteDebug(s);
  116.         }
  117.         */
  118.         
  119.     }
  120.     
  121.     return CallNextHookEx(hhook, nCode, wParam, lParam);
  122. }
  123.  
  124.